﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading; //necesario para trabajar con hilos.

using SistemaCenterQuimPost.UI; //necesario para heredar de frmAutenticarPost del Post.
using SistemaCenterQuimPost.Reportes; //necesario para crear el reporteEnBlanco

using SistemaCenterQuimCentral.UI.CentralSupervisor; //necesario para generar los menus.
using SistemaCenterQuimCentral.UI.CentralAdministrador;

namespace SistemaCenterQuimCentral.UI
{
    public partial class frmAutenticarCentral : SistemaCenterQuimPost.UI.frmAutenticarPost
    {
        //----------------ATRIBUTOS-------------------
        private DataSet3 centerQuimDs;  //variable para acceder a la base de datos.
        private DataSet3TableAdapters.UsuariosTableAdapter usuariosTa;
        
        
        //----------------CONSTRUCTORES---------------
        public frmAutenticarCentral()
        {
            InitializeComponent();
        }

        public frmAutenticarCentral(string unaFecha) //Se usa el contructor derivado. Se recibe como parámetro la fecha del sistema CenterQuim
        {
            InitializeComponent();

            this.centerQuimDs = new DataSet3();  //se inicializa las variables que conectarán a la base de datos.
            this.usuariosTa = new DataSet3TableAdapters.UsuariosTableAdapter();

            this.fechaActual = unaFecha;
        }

        //-------------------ESTADOS-----------------
                
        //----------------METODOS VARIOS---------------

        protected override void procesarIngreso()  //lo encapsule en un método ya que así puedo usar para capturar las teclas enter sobre textBox.
        {
            usuariosTa.FillByNombreContraseña(centerQuimDs.Usuarios, txtUsuario.Text.Trim().ToUpper(), txtContraseña.Text.Trim().ToUpper());  //busca el usuario en la base de datos.

            if (centerQuimDs.Usuarios.Rows.Count > 0) //es decir si se encontró un nombre de usuario que coincida con txtUsuario.
            {
                if (centerQuimDs.Usuarios[0].tipoUsuario == "A")  //Esto se hizo con hilo para solucionar el problema que se cierra la aplicación al cerrar frmAutenticarPost
                {
                    Thread NuevoHilo = new System.Threading.Thread(new System.Threading.ThreadStart(ejecutarModoAdministrador));
                    NuevoHilo.SetApartmentState(System.Threading.ApartmentState.STA);
                    NuevoHilo.Start();

                }
                
                else if (centerQuimDs.Usuarios[0].tipoUsuario == "S") //Esto se hizo con hilo para solucionar el problema que se cierra la aplicación al cerrar frmAutenticarPost
                {
                    Thread NuevoHilo = new System.Threading.Thread(new System.Threading.ThreadStart(ejecutarModoSupervisor));
                    NuevoHilo.SetApartmentState(System.Threading.ApartmentState.STA);
                    NuevoHilo.Start();

                }

                this.Close();  //cerrar el formulario de autenticación
            }
            else
            {
                errorProvider1.SetError(txtUsuario, "El usuario y/o contraseña no son válidos.");
            }
        }

        protected override void ejecutarModoSupervisor()  //ejecuta en un hilo la aplicación a traves de frmMenuSupervisor.
        {
            frmMenuSupervisorCentral unFrmMenuSupervisorCentral = new frmMenuSupervisorCentral();
            unFrmMenuSupervisorCentral.setNombreUsuario(centerQuimDs.Usuarios[0].nombreUsuario); //establece el usuario
            unFrmMenuSupervisorCentral.setCodigoUsuario(centerQuimDs.Usuarios[0].codUsuario); //establece el codUsuario
            unFrmMenuSupervisorCentral.setFechaActual(this.fechaActual); //establece fechaActual
            unFrmMenuSupervisorCentral.setTxtMenu();
            unFrmMenuSupervisorCentral.ShowDialog();
        }

        //protected virtual, para que se pueda redefinir en frmAutenticarCentral
        protected override void ejecutarModoAdministrador() //ejecuta en un hilo la aplicación a traves de frmMenuAdministrador.
        {
            frmMenuAdministradorCentral unFrmMenuAdministradorCentral = new frmMenuAdministradorCentral();
            unFrmMenuAdministradorCentral.setNombreUsuario(centerQuimDs.Usuarios[0].nombreUsuario); //establece el usuario
            unFrmMenuAdministradorCentral.setCodigoUsuario(centerQuimDs.Usuarios[0].codUsuario); //establece el codUsuario
            unFrmMenuAdministradorCentral.setFechaActual(this.fechaActual); //establece fechaActual
            unFrmMenuAdministradorCentral.setTxtMenu();
            unFrmMenuAdministradorCentral.ShowDialog();  //muestra el formulario
        }

    }

}
